package com.beinhospital_sw21_h2_05.beinhospitalsw21h205.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.beinhospital_sw21_h2_05.beinhospitalsw21h205.entity.Admission;
import com.beinhospital_sw21_h2_05.beinhospitalsw21h205.entity.Linshi2;
import com.beinhospital_sw21_h2_05.beinhospitalsw21h205.entity.Patient;
import com.beinhospital_sw21_h2_05.beinhospitalsw21h205.service.PatientService;
import com.beinhospital_sw21_h2_05.beinhospitalsw21h205.utils.PageBean;
import com.beinhospital_sw21_h2_05.beinhospitalsw21h205.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 控制器类，处理与病人（Patient）相关的HTTP请求
 */
@CrossOrigin(origins = "http://localhost:8134")
@Slf4j
@RestController
public class PatientController {

    @Autowired
    PatientService patientService;

    /**
     * 病人分页查询
     *
     * @param token 用户身份验证的token
     * @param page 页码，默认为1
     * @param pageSize 每页大小，默认为10
     * @param Flag 查询标志
     * @return 分页查询结果
     */
    @GetMapping("/Patient")
    public Result page(@RequestHeader("token") String token,
                       @RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize,
                       Integer Flag) {
        // 使用 StpUtil 工具类验证 token 的有效性
        log.info("用户token：{}", token);
        String UserID = (String) StpUtil.getLoginIdByToken(token);

        if (Integer.parseInt(UserID) > 0) {
            // 获取用户ID
            log.info("用户ID：{}", UserID);
            log.info("病人分页查询：{}，{},{}", page, pageSize, Flag);
            PageBean pageBean = patientService.page(page, pageSize, Flag, Integer.parseInt(UserID));
            return Result.success(pageBean);
        } else {
            // Token 验证失败，处理未登录或无效 token 的情况
            return Result.error("Token is invalid or expired");
        }
    }

    /**
     * 添加病人记录
     *
     * @param token 用户身份验证的token
     * @param admission 病人记录信息
     * @return 操作结果
     */
    @PostMapping("/Patient")
    public Result insert(@RequestHeader("token") String token, @RequestBody Admission admission) {
        // 使用 StpUtil 工具类验证 token 的有效性
        log.info("用户token：{}", token);
        String UserID = (String) StpUtil.getLoginIdByToken(token);

        if (Integer.parseInt(UserID) > 0) {
            // 获取用户ID
            log.info("用户ID：{}", UserID);
            log.info("记录表：{}", admission);
            patientService.add(admission, Integer.parseInt(UserID));
            return Result.success();
        } else {
            // Token 验证失败，处理未登录或无效 token 的情况
            return Result.error("Token is invalid or expired");
        }
    }

    /**
     * 医嘱分页查询
     *
     * @param token 用户身份验证的token
     * @param page 页码，默认为1
     * @param pageSize 每页大小，默认为10
     * @return 分页查询结果
     */
    @GetMapping("/Order")
    public Result page1(@RequestHeader("token") String token,
                        @RequestParam(defaultValue = "1") Integer page,
                        @RequestParam(defaultValue = "10") Integer pageSize) {
        // 使用 StpUtil 工具类验证 token 的有效性
        log.info("用户token：{}", token);
        String UserID = (String) StpUtil.getLoginIdByToken(token);

        if (Integer.parseInt(UserID) > 0) {
            // 获取用户ID
            log.info("用户ID：{}", UserID);
            log.info("医嘱分页查询：{}，{}", page, pageSize);
            PageBean pageBean = patientService.page1(page, pageSize, Integer.parseInt(UserID));
            return Result.success(pageBean);
        } else {
            // Token 验证失败，处理未登录或无效 token 的情况
            return Result.error("Token is invalid or expired");
        }
    }
}
